import os
import subprocess

# 支持的视频格式
VIDEO_EXTENSIONS = ('.mp4', '.mkv', '.avi', '.mov', '.flv', '.wmv')

# 获取用户输入的文件夹路径
folder_path = input("请输入包含视频的文件夹路径：").strip()

# 检查路径是否存在
if not os.path.isdir(folder_path):
    print(f"❌ 错误：路径 '{folder_path}' 不存在或不是文件夹")
    exit(1)

# 设置输出文件夹路径
output_dir = os.path.join(folder_path, 'output')

# 如果 output 文件夹不存在，则创建
if not os.path.exists(output_dir):
    os.makedirs(output_dir)
    print(f"\n📁 已创建输出文件夹：{output_dir}")
else:
    print(f"\n📁 使用已有输出文件夹：{output_dir}")

print(f"\n✅ 正在扫描文件夹：{folder_path}")
print("开始提取音频...\n")

# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
    file_path = os.path.join(folder_path, filename)

    # 检查是否是视频文件
    if os.path.isfile(file_path) and filename.lower().endswith(VIDEO_EXTENSIONS):
        print(f"🎵 正在处理：{filename}")

        # 构建音频输出路径（使用 output 文件夹）
        audio_name = os.path.splitext(filename)[0] + ".mp3"
        audio_path = os.path.join(output_dir, audio_name)

        # FFmpeg 命令参数
        cmd = [
            'ffmpeg',
            '-i', file_path,
            '-vn',              # 不包含视频流
            '-ar', '44100',     # 音频采样率
            '-ac', '2',         # 声道数
            '-ab', '192k',      # 比特率
            '-f', 'mp3',        # 输出格式
            audio_path
        ]

        # 执行命令
        try:
            subprocess.run(cmd, check=True)
            print(f"✅ 已生成音频：{audio_name}\n")
        except subprocess.CalledProcessError as e:
            print(f"❌ 处理失败：{e}\n")

print("🎉 所有音频提取完成！")